<?php

class LookupController extends BackOfficeController
{
    /**
     * @var string the default layout for the views. Defaults to '//layouts/column2', meaning
     * using two-column layout. See 'protected/views/layouts/column2.php'.
     */
    public $layout='//layouts/column2';

    /**
     * Displays a particular model.
     * @param integer $id the ID of the model to be displayed
     */
    public function actionView($id)
    {
        $this->render('view',array(
            'model'=>FSM::run('Admin.Lookup.get', array('id'=>$id))->model,
        ));
    }

    /**
     * Creates a new model.
     * If creation is successful, the browser will be redirected to the 'view' page.
     */
    public function actionCreate()
    {
        $this->actionUpdate();
    }

    /**
     * Updates a particular model.
     * If update is successful, the browser will be redirected to the 'view' page.
     * @param integer $id the ID of the model to be updated
     */
    public function actionUpdate()
    {
        if (Yii::app()->request->IsPostRequest) {
            // save posted data
            $_POST['validateOnly'] = ($this->post('ajax','') == 'lookup-form');
            $result = FSM::run('Admin.Lookup.save', $_POST);
            $model = $result->model; 

            if ($this->post('ajax','') == 'lookup-form'){
                echo $result->getActiveErrorMessages($result->model);
                Yii::app()->end();
            }   
            if (! $result->hasErrors()){
                //Update the Lookup setting for the system cache
                FSM::run('Admin.Lookup.db2php', array('module'=>'Core'));    
                $this->message = Yii::t('Core','Item has been saved successfully.');
                //If user create an new type 
                if($this->get('return'))
                    $this->redirect(array('index'));
                //If admin only want to save.    
                if($this->post('save_only'))
                    $this->redirect(array('index'));
                //If admin want to save and add another one.        
                if($this->post('save_add'))
                    $this->redirect(array('create','Lookup[type]'=>$model->type));
                 //By default, redirect to update page   
                $this->redirect(array('update', 'id'=>$model->id));
            }
        } else {
            // show edit form
            $id = $this->get('id', 0);
            if ($id == 0) {
                $model = new Lookup();
            } else {
                $model = FSM::run('Admin.Lookup.get', array('id' => $id))->model;
            }
        }
            
        $this->render('update', array('model' => $model));
    }

    /**
     * Deletes a particular model.
     * If deletion is successful, the browser will be redirected to the 'index' page.
     * @param integer $id the ID of the model to be deleted
     */
    public function actionDelete($id)
    {
        if(Yii::app()->request->isPostRequest)
        {
            // we only allow deletion via POST request
            if (($id = $this->get('id',null)) !== null) {
                $ids = is_numeric($id) ? array($id) : explode(',',$id);
                
                // delete one or multiple objects given the list of object IDs
                $result = FSM::run('Admin.Lookup.delete', array('ids' => $ids));
                //Update the Lookup setting for the system cache
                FSM::run('Admin.Lookup.db2php', array('module'=>'Core'));
                if ($result->hasErrors()) {
                    echo $result->getError('ErrorCode');
                } elseif(!Yii::app()->request->isAjaxRequest) {
                    // only redirect user to the admin page if it is not an AJAX request
                    $this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('admin'));
                }
            } else {
                throw new CHttpException(400,Yii::t('Core','Cannot delete item with the given ID.'));
            }
        } else {
            throw new CHttpException(400,Yii::t('Core','Invalid request. Please do not repeat this request again.'));
        }
    }

    /**
     * Lists all models.
     */
    public function actionIndex()
    {
        $this->actionAdmin();
    }

    /**
     * Manages all models.
     */
    public function actionAdmin()
    {
        $model=new Lookup('search');
        $model->unsetAttributes();  // clear any default values
        if(isset($_GET['Lookup']))
            $model->attributes=$_GET['Lookup'];
       /* else{
            $_GET['Lookup']['type']=Lookup::firstType();
            $model->attributes=$_GET['Lookup'];
        }*/
        
        
        $this->render('admin',array(
            'model'=>$model,
            //'criteria'=>$criteria,
        ));
    }
    /**
    * Action order, call when use ajax
    * 
    */
    public function actionOrder()
    {
        $result = FSM::run('Admin.Lookup.saveOrder', $_GET);
        echo $result->toJson();
    }
}
